home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gold Medal Software 2
/
Gold Medal Software Volume 2 (Gold Medal) (1994).iso
/
windows
/
win31
/
macsyma.arj
/
MACSDEMO.EXE
/
GENTRANC.OUT
< prev
next >
Wrap
Text File
|
1993-09-15
|
7KB
|
253 lines
(c1) (kill(a,b,c,m,u,u1,u2,v,x,y,z),
disp(dpart(" DEMONSTRATION OF GENTRAN'S `C' CAPABILITY ")),
disp("TRANSLATION INTO `C' CODE"))$
|$label(0,15,Times New Roman,)$box( DEMONSTRATION OF GENTRAN'S `C' CAPABILITY )
|$label(0,15,Times New Roman,)TRANSLATION INTO `C' CODE
(c2) ( genfloat : true , gentranlang : 'c )$
(c3) gentran( p : a*x^2 + b*x + c )$
p = a*pow(x,2)+b*x+c;
(c4) gentran( m : matrix([u, 2*u^2], [-v^2, v]) )$
{
m[1][1] = u;
m[1][2] = 2.0d0*pow(u,2);
m[2][1] = -pow(v,2);
m[2][2] = v;
}
(c5) gentran( for n:1 step 2 thru 9 do
p : p*f[n] )$
for (n = 1; !(n>9); n = n+2)
p = p*f[n];
(c6) gentran( for n:2 next n*2 thru 500 do
s : s + n )$
for (n = 2.0d0; !(n>500.0d0); n = n*2.0d0)
s = s+n;
(c7) gentran( while f(x) >= 0 do
x : x + 0.25 )$
while (!!(f(x)>=0.0d0))
x = x+0.25;
(c8) gentran( unless f(x) >= 0 do
x : x + 0.25 )$
while (!(f(x)>=0.0d0))
x = x+0.25;
(c9) gentran( if x > 0
then y : x )$
if (x>0.0d0)
y = x;
(c10) gentran( if x > 0
then y : x
else y : -x )$
if (x>0.0d0)
y = x;
else
y = -x;
(c11) gentran( calcv(v, x, y, z) )$
calcv(v,x,y,z);
(c12) gentran( ( u1 : x^2,
u2 : x - y ) )$
{
u1 = pow(x,2);
u2 = x-y;
}
(c13) gentran( block( u1 : x^2,
u2 : x - y ) )$
{
u1 = pow(x,2);
u2 = x-y;
}
(c14) gentran( block( f : 1,
i : 1,
loop,
f : f*i,
i : i + 1,
if i <= n then go(loop) ) )$
{
f = 1.0d0;
i = 1.0d0;
loop:
f = f*i;
i = i+1.0d0;
if (i<=n)
goto loop;
}
(c15) (disp("COMMENTS AND OTHER LITERAL STRINGS"))$
|$label(0,15,Times New Roman,)COMMENTS AND OTHER LITERAL STRINGS
(c16) gentran( literal("/*", cr,
" * This is a `C' comment.", cr,
" */", cr) )$
/*
* This is a `C' comment.
*/
(c17) /* EXPLICIT TYPE DECLARATIONS
*/
gentran( type(float, m(2,2)),
m : matrix([u, 2*u^2], [-v^2, v]) )$
float m[3.0d0][3.0d0];
{
m[1][1] = u;
m[1][2] = 2.0d0*pow(u,2);
m[2][1] = -pow(v,2);
m[2][2] = v;
}
(c18) gentran( fac(n) := block(type(int, fac, n),
f : 1,
for i:1 thru n do f : f*i,
type(int, f, i),
return(f)) )$
int fac(n)
int n;
{
int f,i;
f = 1.0d0;
for (i = 1; !(i>n); i = i+1)
f = f*i;
return(f);
}
(c19) (disp("TEMPLATE PROCESSING"))$
|$label(0,15,Times New Roman,)TEMPLATE PROCESSING
(c20) n : 3$
(c21) m : genmatrix(m, n, n);
|$label(0,15,Times New Roman,$(d21$))$matrix(3,3,$sub(m,1$ina($, )$hinge()1),$sub(m,1$ina($, )$hinge()2),$sub(m,1$ina($, )$hinge()3),$sub(m,2$ina($, )$hinge()1),$sub(m,2$ina($, )$hinge()2),$sub(m,2$ina($, )$hinge()3),$sub(m,3$ina($, )$hinge()1),$sub(m,3$ina($, )$hinge()2),$sub(m,3$ina($, )$hinge()3))
(c22) /*
** -------- contents of file c-det-template.gentran: --------
**
** double det(m)
** <<
** gentran( type( double, m(eval(n),eval(n)) ) );
** gendecs(false);
** >>
** {
** <<
** ccurrind : ccurrind + tablen;
** gentran( literal(tab, "/*", cr,
** tab, " * Beginning of generated code...", cr,
** tab, " */", cr),
** det : eval( determinant(m) ),
** literal(tab, "/*", cr,
** tab, " * ...end of generated code", cr,
** tab, " */", cr) );
** ccurrind : ccurrind - tablen;
** >>
** }
** >>
**
** ----------------------------------------------------
*/
gentranin("macsyma:demo;c-det-template.gentran");
double det(m)
double m[4.0d0][4.0d0];
{
/*
* Beginning of generated code...
*/
det = m[1][1]*(m[2][2]*m[3][3]-(1.0d0*m[2][3]*m[3][2]))-(1.0d0*m[1][2]*(m[2]
[1]*m[3][3]-(1.0d0*m[2][3]*m[3][1])))+m[1][3]*(m[2][1]*m[3][2]-(1.0d0*m[2][
2]*m[3][1]));
/*
* ...end of generated code
*/
}
|$label(0,15,Times New Roman,$(d22$))true
(c23) /*
** -------- contents of file c-inv-template.gentran: --------
**
** inv(m, minv)
** <<
** gentran( type( double, m(eval(n),eval(n)), minv(eval(n),eval(n)) ) );
** gendecs(false);
** >>
** {
** <<
** ccurrind : ccurrind + tablen;
** gentran( literal(tab, "/*", cr,
** tab, " * Beginning of generated code...", cr,
** tab, " */", cr),
** minv : eval( m^^(-1) ),
** literal(tab, "/*", cr,
** tab, " * ...end of generated code", cr,
** tab, " */", cr) );
** ccurrind : ccurrind - tablen;
** >>
** }
** >>
**
** ----------------------------------------------------
*/
gentranin("macsyma:demo;c-inv-template.gentran");
inv(m, minv)
double m[4.0d0][4.0d0],minv[4.0d0][4.0d0];
{
/*
* Beginning of generated code...
*/
{
minv[1][1] = (m[2][2]*m[3][3]-(1.0d0*m[2][3]*m[3][2]))*1.0d0/((m[1][1]*m
[2][2]-(1.0d0*m[1][2]*m[2][1]))*m[3][3]+(-(1.0d0*m[1][1]*m[2][3])+m[1][
3]*m[2][1])*m[3][2]+(m[1][2]*m[2][3]-(1.0d0*m[1][3]*m[2][2]))*m[3][1]);
minv[1][2] = -(1.0d0*(m[1][2]*m[3][3]-(1.0d0*m[1][3]*m[3][2]))*1.0d0/((m
[1][1]*m[2][2]-(1.0d0*m[1][2]*m[2][1]))*m[3][3]+(-(1.0d0*m[1][1]*m[2][3
])+m[1][3]*m[2][1])*m[3][2]+(m[1][2]*m[2][3]-(1.0d0*m[1][3]*m[2][2]))*m
[3][1]));
minv[1][3] = (m[1][2]*m[2][3]-(1.0d0*m[1][3]*m[2][2]))*1.0d0/((m[1][1]*m
[2][2]-(1.0d0*m[1][2]*m[2][1]))*m[3][3]+(-(1.0d0*m[1][1]*m[2][3])+m[1][
3]*m[2][1])*m[3][2]+(m[1][2]*m[2][3]-(1.0d0*m[1][3]*m[2][2]))*m[3][1]);
minv[2][1] = -(1.0d0*(m[2][1]*m[3][3]-(1.0d0*m[2][3]*m[3][1]))*1.0d0/((m
[1][1]*m[2][2]-(1.0d0*m[1][2]*m[2][1]))*m[3][3]+(-(1.0d0*m[1][1]*m[2][3
])+m[1][3]*m[2][1])*m[3][2]+(m[1][2]*m[2][3]-(1.0d0*m[1][3]*m[2][2]))*m
[3][1]));
minv[2][2] = (m[1][1]*m[3][3]-(1.0d0*m[1][3]*m[3][1]))*1.0d0/((m[1][1]*m
[2][2]-(1.0d0*m[1][2]*m[2][1]))*m[3][3]+(-(1.0d0*m[1][1]*m[2][3])+m[1][
3]*m[2][1])*m[3][2]+(m[1][2]*m[2][3]-(1.0d0*m[1][3]*m[2][2]))*m[3][1]);
minv[2][3] = -(1.0d0*(m[1][1]*m[2][3]-(1.0d0*m[1][3]*m[2][1]))*1.0d0/((m
[1][1]*m[2][2]-(1.0d0*m[1][2]*m[2][1]))*m[3][3]+(-(1.0d0*m[1][1]*m[2][3
])+m[1][3]*m[2][1])*m[3][2]+(m[1][2]*m[2][3]-(1.0d0*m[1][3]*m[2][2]))*m
[3][1]));
minv[3][1] = (m[2][1]*m[3][2]-(1.0d0*m[2][2]*m[3][1]))*1.0d0/((m[1][1]*m
[2][2]-(1.0d0*m[1][2]*m[2][1]))*m[3][3]+(-(1.0d0*m[1][1]*m[2][3])+m[1][
3]*m[2][1])*m[3][2]+(m[1][2]*m[2][3]-(1.0d0*m[1][3]*m[2][2]))*m[3][1]);
minv[3][2] = -(1.0d0*(m[1][1]*m[3][2]-(1.0d0*m[1][2]*m[3][1]))*1.0d0/((m
[1][1]*m[2][2]-(1.0d0*m[1][2]*m[2][1]))*m[3][3]+(-(1.0d0*m[1][1]*m[2][3
])+m[1][3]*m[2][1])*m[3][2]+(m[1][2]*m[2][3]-(1.0d0*m[1][3]*m[2][2]))*m
[3][1]));
minv[3][3] = (m[1][1]*m[2][2]-(1.0d0*m[1][2]*m[2][1]))*1.0d0/((m[1][1]*m
[2][2]-(1.0d0*m[1][2]*m[2][1]))*m[3][3]+(-(1.0d0*m[1][1]*m[2][3])+m[1][
3]*m[2][1])*m[3][2]+(m[1][2]*m[2][3]-(1.0d0*m[1][3]*m[2][2]))*m[3][1]);
}
/*
* ...end of generated code
*/
}
|$label(0,15,Times New Roman,$(d23$))true
(c24) kill(m,n)$